/**
 * @description: 请说出下面语句执行后可能输出的结果 
 * @output: [1, 2] | [2, 1]
 */

window.addEventListener('click', () => {
  Promise.resolve().then(() => {
    setTimeout(() => {
      console.log(1)
    })
  })
})

window.addEventListener('click', () => {
  setTimeout(() => {
    Promise.resolve().then(() => {
      console.log(2)
    })
  })
})

/** 
 * @description: 请尽可能准确的给出 DeviceMap 类型，并要求具有通用性
*/

// declare type EnumMap<T extends string | number | symbol, U extends Record<string, unknown> = never> = {
//   [P in T]: [U] extends [never] ? { label: string; value: P } : { label: string; value: P } & U
// }

enum Device {
  ANDROID = 'ANDROID',
  IOS = 'IOS',
  PC = 'PC'
}

enum ISH5 {
  NO,
  YES
}

const DeviceMap = {
  [Device.ANDROID]: { label: '安卓', value: Device.ANDROID, isH5: ISH5.YES },
  [Device.IOS]: { label: 'IOS', value: Device.IOS, sso: ISH5.YES },
  [Device.PC]: { label: 'PC', value: Device.PC, sso: ISH5.NO },
}


/** 
 * @description: 如何保证始终同时只能发送一次请求（包括不同组件同时发送该请求）
*/

// getData() {
//   return new Promise(resolve => {
//     if (state.data) return resolve(state.data)

//     if (loading) {
//       return setTimeout(() => {
//         resolve(this.getData())
//       }, 300)
//     }

//     loading = true

//     return api.featchDate()
//       .then(({ data }) => {
//         state.data = data

//         return resolve(state.data)
//       })
//       .finally(() => {
//         loading = false
//       })
//   })
// }